#ifndef CONFIG_HPP_
#define CONFIG_HPP_

#include <string>
#include <sstream>


class Config{

private:

	static Config *configInstance;


	std::string clientName;
	std::string interfaceAddress;
	std::string multicastAddress;

	int connectionNumber;

	std::string clientPort;
	std::string multicastPort;
	std::string unicastPort;

	std::string clientInputFile;
	std::string clientOutputFile;
	std::string peerDiscoveryFile;
	std::string rawDataLogFile;
	std::string clientInformationFile;
	std::string logFile;

	bool helpFlag;


	Config();
	Config(const Config&);

	void setDefault();


public:

	static Config *instance();

	void parseArguments(int argc, char **argv);


	std::string& getClientName();
	std::string& getInterfaceAddress();
	std::string& getMulticastAddress();

	int getConnectionNumber();

	std::string& getClientPort();
	std::string& getMulticastPort();
	std::string& getUnicastPort();

	std::string& getClientInputFile();
	std::string& getClientOutputFile();
	std::string& getPeerDiscoveryFile();
	std::string& getRawDataLogFile();
	std::string& getClientInformationFile();
	std::string& getLogFile();

	bool isHelpFlag();

};


#endif /* CONFIG_HPP_ */
